home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
basic
/
makmenu2.zip
/
QWIKSORT.BAS
< prev
next >
Wrap
BASIC Source File
|
1989-08-08
|
1KB
|
53 lines
DEFINT A-Z
SUB QwikSort (Kee$(), RecIndex%(), NData%)
' Procedure to perform a non-recursive QuickSort
STATIC Left%, Right%, I%, J%, Median$, Stack%
DIM LStack%(50), RStack%(50)
' Initialize record indices for the keys
Stack.Height% = 1: LStack%(1) = 1: RStack%(1) = NData%
DO
Left% = LStack%(Stack.Height%)
Right% = RStack%(Stack.Height%)
Stack.Height% = Stack.Height% - 1
DO
I% = Left%: J% = Right%
Median$ = Kee$(RecIndex%((Left% + Right%) \ 2))
DO
WHILE Kee$(RecIndex%(I%)) < Median$
I% = I% + 1
WEND
WHILE Median$ < Kee$(RecIndex%(J%))
J% = J% - 1
WEND
IF I% <= J% THEN
SWAP RecIndex%(I%), RecIndex%(J%)
I% = I% + 1: J% = J% - 1
END IF
LOOP WHILE I% <= J%
IF I% < Right% THEN
Stack.Height% = Stack.Height% + 1
LStack%(Stack.Height%) = I%
RStack%(Stack.Height%) = Right%
END IF
Right% = J%
LOOP WHILE Left% < Right%
LOOP WHILE Stack.Height% <> 0
ERASE LStack%, RStack%
END SUB